package com.yiren.dbaa.util;

import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ScrollView;

/**
 * 设置ListView高度工具 */
public class ListViewUtils {

    /**
     * 设置listView高度
     *
     * @param listView
     */
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

    /**
     * 计算ExpandableListView高度
     *
     * @param listView
     */
    public static int getListViewHeight(ExpandableListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return 0;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        return params.height;
    }

    /**
     * 设置ExpandableListView高度
     *
     * @param listView
     */
    public static void setExpandableListViewHeightBasedOnChildren(ExpandableListView listView) {
        ExpandableListAdapter listAdapter = listView.getExpandableListAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }
        // int totalHeight = getListViewHeight(listView);
	       /* for (int i = 0; i < listAdapter.getGroupCount(); i++) {  
	            for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
	          	  View view =  listAdapter.getChildView(i, j, true, null, listView);
	          	  view.measure(0, 0);  
	  			totalHeight += view.getMeasuredHeight();
			}  
	        } */
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = 10000;
        //totalHeight+(listView.getDividerHeight() * (listAdapter.getGroupCount() - 1)) +1000;
        //params.height = totalHeight+(listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
        listView.setLayoutParams(params);
    }

    /**
     * 设置ScrollView滑动到底部
     *
     * @param scroll
     */
    public static void scrollToBottom(final ScrollView scroll) {
        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                scroll.fullScroll(ScrollView.FOCUS_DOWN);
            }
        });
    }

    /**
     * 设置ScrollView滑动到顶部
     *
     * @param scroll
     */
    public static void scrollToTop(final ScrollView scroll) {
        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                scroll.fullScroll(ScrollView.FOCUS_UP);
            }
        });
    }


    public static void setListViewHeightBasedOnChildren(ExpandableListView listView) {
        //获取ListView对应的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   //listAdapter.getCount()返回数据项的数目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);  //计算子项View 的宽高
            totalHeight += listItem.getMeasuredHeight();  //统计所有子项的总高度
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        //listView.getDividerHeight()获取子项间分隔符占用的高度
        //params.height最后得到整个ListView完整显示需要的高度
        listView.setLayoutParams(params);
    }
}
